package com.fastCms.business;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.sql.SQLException;
import java.util.Collections;

/**
 * ORM代码生成器
 */
public class MyBatisPlusGenerator {
    private final static String URL = "jdbc:mysql://146.56.242.217:3306/blueorder?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai";
    private final static String USERNAME = "root";
    private final static String PASSWORD = "hami123!";
    private final static String AUTHOR = "quan";
    private final static String TABLE_NAME = "blue_material";


    public static void main(String[] args) throws SQLException {

        FastAutoGenerator.create(URL, USERNAME, PASSWORD)
            .globalConfig(builder -> {
                builder.author(AUTHOR)
                    //启用swagger
                    //.enableSwagger()
                    //指定输出目录
                    .outputDir(System.getProperty("user.dir") + "/business/src/main/java");
            })

            .packageConfig(builder -> {
                builder.
                    entity("pojo.entity")//实体类包名
                    .parent("com.fastCms.business.blueorder")//父包名。如果为空，将下面子包名必须写全部， 否则就只需写子包名
                    .controller("controller")//控制层包名
                    .mapper("daos")//mapper层包名
                    //.other("dto")//生成dto目录 可不用
                    .service("service")//service层包名
                    .serviceImpl("service.impl")//service实现类包名
                    //自定义mapper.xml文件输出目录
                    .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/business/src/main/resources/mappers"));
            })
            .strategyConfig(builder -> {
                //设置要生成的表名
                builder.addInclude(TABLE_NAME)
                    //.addTablePrefix("sys_")//设置表前缀过滤
                    .entityBuilder()
                    .enableLombok()
                    .enableChainModel()
                    .naming(NamingStrategy.underline_to_camel)//数据表映射实体命名策略：默认下划线转驼峰underline_to_camel
                    .columnNaming(NamingStrategy.underline_to_camel)//表字段映射实体属性命名规则：默认null，不指定按照naming执行
                    .idType(IdType.UUID)//添加全局主键类型
                    .formatFileName("%s")//格式化实体名称，%s取消首字母I,
                    .mapperBuilder()
                    .enableMapperAnnotation()//开启mapper注解
                    .enableBaseResultMap()//启用xml文件中的BaseResultMap 生成
                    .enableBaseColumnList()//启用xml文件中的BaseColumnList
                    .formatMapperFileName("%sMapper")//格式化Dao类名称
                    .formatXmlFileName("%sMapper")//格式化xml文件名称
                    .serviceBuilder()
                    .formatServiceFileName("%sService")//格式化 service 接口文件名称
                    .formatServiceImplFileName("%sServiceImpl")//格式化 service 接口文件名称
                    .controllerBuilder()
                    .enableRestStyle();
            })
//                .injectionConfig(consumer -> {
//            Map<String, String> customFile = new HashMap<>();
//            // 配置DTO（需要的话）但是需要有能配置Dto的模板引擎，比如freemarker，但是这里我们用的VelocityEngine，因此不多作介绍
//            customFile.put("DTO.java", "/templates/entityDTO.java.ftl");
//            consumer.customFile(customFile);
//           })
            .execute();
    }
//        //1. 全局配置
//        GlobalConfig config = new GlobalConfig();
//        config.setActiveRecord(true) // 是否支持AR模式
//            .setAuthor("liusq") // 作者
//            //.setOutputDir("D:\\workspace_mp\\mp03\\src\\main\\java") // 生成路径
////                .setOutputDir("/Users/xiaomin/mydata/code/green-java/src/main/java") // 生成路径
//            .setOutputDir("/Users/aquan/hamiProject/friend/friend-java/src/main/java") // 生成路径
//            .setFileOverride(false)  // 文件覆盖
//            .setIdType(IdType.UUID) // 主键策略
//            .setServiceName("%sService")  // 设置生成的service接口的名字的首字母是否为I
//            // IEmployeeService
//            .setSwagger2(true)
//            .setBaseResultMap(true)//生成基本的resultMap
//            .setBaseColumnList(true);//生成基本的SQL片段
//
////				//2. 数据源配置
//        DataSourceConfig dsConfig = new DataSourceConfig();
//        dsConfig.setDbType(DbType.MYSQL)  // 设置数据库类型
//            .setDriverName("com.mysql.jdbc.Driver")
//            .setUrl("jdbc:mysql://146.56.242.217:3306/new_friend?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai")
//            .setUsername("root")
//            .setPassword("hami123!");
//        //2. 数据源配置
////				DataSourceConfig  dsConfig  = new DataSourceConfig();
////				dsConfig.setDbType(DbType.ORACLE)  // 设置数据库类型
////						.setDriverName("oracle.jdbc.driver.OracleDriver")
////						.setUrl("jdbc:oracle:thin:@198.16.1.30FileUtil:1521:orcl")
////						.setUsername("zjmsa_oa")
////						.setPassword("zjmsa_oa");
//
//        //3. 策略配置globalConfiguration中
//        StrategyConfig stConfig = new StrategyConfig();
//        stConfig.setCapitalMode(true) //全局大写命名
////						.setDbColumnUnderline(true)  // 指定表名 字段名是否使用下划线
//            .setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
//            //.setTablePrefix("tbl_")
//            .setInclude("user");  // 生成的表
//
//        //4. 包名策略配置
//        PackageConfig pkConfig = new PackageConfig();
//        pkConfig.setParent("com.fastCms.customer.work")
//            .setMapper("daos")//dao
//            .setService("service")//servcie
//            .setController("controller")//controller
//            .setEntity("pojo.entity")
//            .setXml("mappers");//mappers.xml
//
//        //5. 整合配置
//        AutoGenerator ag = new AutoGenerator();
//        ag.setGlobalConfig(config)
//            .setDataSource(dsConfig)
//            .setStrategy(stConfig)
//            .setPackageInfo(pkConfig);
//
//        //6. 执行
//        ag.execute();

}
